/* * Copyright (C) 2014 IUH �yber$oft Team * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package vn.cybersoft.obs.android.activities; import vn.cybersoft.obs.android.R; import vn.cybersoft.obs.android.provider.OptimalMode; import vn.cybersoft.obs.android.utilities.Log; import vn.cybersoft.obs.android.utilities.ToastManager; import vn.cybersoft.obs.android.utilities.Utils; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceActivity; import android.preference.TwoStatePreference; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; /** * @author Luan Vu (hlvu.cybersoft@gmail.com) * */ public class SetOptimalModeActivity extends PreferenceActivity implements OnPreferenceChangeListener { public static final String KEY_SCREEN_BRIGHTNESS = "screen_brightness"; public static final String KEY_SCREEN_TIMEOUT = "screen_timeout"; public static final String KEY_VIBRATE = "vibrate_on"; public static final String KEY_WIFI = "wifi_on"; public static final String KEY_BLUETOOTH = "bluetooth_on"; public static final String KEY_MOBILE_DATA = "mobile_data_on"; public static final String KEY_SYNC = "sync_on"; public static final String KEY_HAPTIC_FEEDBACK = "haptic_feedback_on"; public static final String KEY_DESCRIPTION = "mode_description"; private ListPreference mScreenBrightnessPreference; private ListPreference mScreenTimeoutPreference; private Preference mVibratePreference; private Preference mWifiPreference; private Preference mBluetoothPreference; private Preference mMobileDataPreference; private Preference mSyncPreference; private Preference mHapticFeedbackPreference; private EditTextPreference mDescriptionPreference; private TextView mInputName; private long mModeId; private OptimalMode mOriginalMode; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Override the default content view. setContentView(R.layout.set_optimal_mode_layout); addPreferencesFromResource(R.xml.optimal_mode_prefs); mScreenBrightnessPreference = (ListPreference) findPreference(KEY_SCREEN_BRIGHTNESS); mScreenBrightnessPreference.setOnPreferenceChangeListener(this); mScreenTimeoutPreference = (ListPreference) findPreference(KEY_SCREEN_TIMEOUT); mScreenTimeoutPreference.setOnPreferenceChangeListener(this); mVibratePreference = findPreference(KEY_VIBRATE); mWifiPreference = findPreference(KEY_WIFI); mBluetoothPreference = findPreference(KEY_BLUETOOTH); mMobileDataPreference = findPreference(KEY_MOBILE_DATA); mSyncPreference = findPreference(KEY_SYNC); mHapticFeedbackPreference = findPreference(KEY_HAPTIC_FEEDBACK); mDescriptionPreference = (EditTextPreference) findPreference(KEY_DESCRIPTION); mDescriptionPreference .setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference p, Object newValue) { String val = (String) newValue; p.setSummary(val); return true; } }); mInputName = (TextView) findViewById(R.id.mode_name_input); Intent i = getIntent(); mModeId = i.getLongExtra(OptimalMode.EXTRA_ID, -1); if (Log.LOGV) { Log.v("In SetOptimalModeActivity, mode id = " + mModeId); } OptimalMode mode = null; if (mModeId == -1) { /* no mode found, create new mode */ mode = new OptimalMode(); setTitle(getString(R.string.app_name) + " > " + getString(R.string.add_new_mode)); } else { mode = OptimalMode.getMode(getContentResolver(), mModeId); setTitle(getString(R.string.app_name) + " > " + getString(R.string.edit_mode)); /* bad case */ if (mode == null) { finish(); return; } } mOriginalMode = mode; updatePrefs(mOriginalMode); // We have to do this to get the save/cancel buttons to highlight on // their own. getListView().setItemsCanFocus(true); // Attach actions to each button. Button saveButton = (Button) findViewById(R.id.save); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!TextUtils.isEmpty(SetOptimalModeActivity.this.mInputName.getText())) { saveOptimalMode(); finish(); } else { createToast(SetOptimalModeActivity.this, getString(R.string.save_opt_mode_err)); } } }); Button cancelButton = (Button) findViewById(R.id.cancel); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } @Override protected void onDestroy() { super.onDestroy(); ToastManager.cancelToast(); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private void updatePrefs(OptimalMode mode) { mInputName.setText(mode.name); mScreenBrightnessPreference.setValue(String.valueOf(generalDefaultBrightnessValue(mode.screenBrightness))); mScreenBrightnessPreference.setSummary(mScreenBrightnessPreference.getEntry()); mScreenTimeoutPreference.setValue(String.valueOf(mode.screenTimeout)); mScreenTimeoutPreference.setSummary(mScreenTimeoutPreference.getEntry()); //updateTimeoutPreferenceDescription(mode.screenBrightness); if (Utils.isIceCreamSandwichOrLater()) { ((TwoStatePreference) mVibratePreference).setChecked(mode.vibrate); ((TwoStatePreference) mWifiPreference).setChecked(mode.vibrate); ((TwoStatePreference) mBluetoothPreference).setChecked(mode.vibrate); ((TwoStatePreference) mMobileDataPreference).setChecked(mode.mobileData); ((TwoStatePreference) mSyncPreference).setChecked(mode.vibrate); ((TwoStatePreference) mHapticFeedbackPreference).setChecked(mode.vibrate); } else { ((CheckBoxPreference) mVibratePreference).setChecked(mode.vibrate); ((CheckBoxPreference) mWifiPreference).setChecked(mode.vibrate); ((CheckBoxPreference) mBluetoothPreference).setChecked(mode.vibrate); ((CheckBoxPreference) mMobileDataPreference).setChecked(mode.mobileData); ((CheckBoxPreference) mSyncPreference).setChecked(mode.vibrate); ((CheckBoxPreference) mHapticFeedbackPreference).setChecked(mode.vibrate); } mDescriptionPreference.setText(mode.desc); mDescriptionPreference.setSummary(mode.desc); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private void saveOptimalMode() { OptimalMode mode = new OptimalMode(); mode.id = mModeId; mode.name = mInputName.getText().toString(); mode.screenBrightness = (Integer.valueOf(mScreenBrightnessPreference.getValue()) * 255) / 100; mode.screenTimeout = Integer.valueOf(mScreenTimeoutPreference.getValue()); if (Utils.isIceCreamSandwichOrLater()) { mode.vibrate = ((TwoStatePreference) mVibratePreference).isChecked(); mode.wifi = ((TwoStatePreference) mWifiPreference).isChecked(); mode.bluetooth = ((TwoStatePreference) mBluetoothPreference).isChecked(); mode.mobileData = ((TwoStatePreference) mMobileDataPreference).isChecked(); mode.sync = ((TwoStatePreference) mSyncPreference).isChecked(); mode.hapticFeedback = ((TwoStatePreference) mHapticFeedbackPreference).isChecked(); } else { mode.vibrate = ((CheckBoxPreference) mVibratePreference).isChecked(); mode.wifi = ((CheckBoxPreference) mWifiPreference).isChecked(); mode.bluetooth = ((CheckBoxPreference) mBluetoothPreference).isChecked(); mode.mobileData = ((CheckBoxPreference) mMobileDataPreference).isChecked(); mode.sync = ((CheckBoxPreference) mSyncPreference).isChecked(); mode.hapticFeedback = ((CheckBoxPreference) mHapticFeedbackPreference).isChecked(); } mode.desc = mDescriptionPreference.getText(); if (mode.id == -1) { OptimalMode.addMode(getContentResolver(), mode); mModeId = mode.id; } else { OptimalMode.updateMode(getContentResolver(), mode); } } static void createToast(Context context, String message) { Toast toast = Toast.makeText(context, message, Toast.LENGTH_LONG); ToastManager.setToast(toast); toast.show(); } /* private void updateTimeoutPreferenceDescription(long currentTimeout) { ListPreference preference = mScreenTimeoutPreference; CharSequence summary; if (currentTimeout < 0) { // Unsupported value summary = ""; } else { final CharSequence[] entries = preference.getEntries(); final CharSequence[] values = preference.getEntryValues(); if (entries == null || entries.length == 0) { summary = ""; } else { int best = 0; for (int i = 0; i < values.length; i++) { long timeout = Long.parseLong(values[i].toString()); if (currentTimeout >= timeout) { best = i; } } summary = entries[best]; } } preference.setSummary(summary); }*/ private int generalDefaultBrightnessValue(int value) { int round = Math.round((float)value * 100 / 255); float unRound = Math.round((float)round / 10); int ret = (int) (unRound * 10); return ret == 0 ? 10 : ret; } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { //final String key = preference.getKey(); /* if (KEY_SCREEN_TIMEOUT.equals(key)) { int value = Integer.parseInt((String) newValue); updateTimeoutPreferenceDescription(value); } else {*/ int index = ((ListPreference) preference).findIndexOfValue(newValue.toString()); String entry = (String) ((ListPreference) preference).getEntries()[index]; ((ListPreference) preference).setSummary(entry); //} return true; } }